#include <mysql/mysql.h>
using namespace std;
string host = "localhost";
string user = "zgwlinux";
string passwd = "202408lbwnB.";
string db = "doexe";
int port = 3306;
void client()
{
    MYSQL *my = mysql_init(nullptr);
    if (my == nullptr)
    {
        perror("init error:");
    }

    // 连接mysql 
    if (mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
    {
        cerr << "connect error:" << endl;
    }
    // 初始化加载mysql时默认字符集不是utf-8 需要手动设置字符集
    mysql_set_character_set(my, "utf-8");
    string cur = "select * from user";
    mysql_query(my, cur.c_str());

    MYSQL_RES *res = mysql_store_result(my); // 里面类似一个三级指针存了每一行的其实地址，每一行其实就是一个二级指针
    int row = mysql_num_rows(res);           // 获取行数
    int cloum = mysql_num_fields(res);       // 获取列数

    MYSQL_FIELD *field = mysql_fetch_field(res); // 获取列信息本质也是一个结构体对象
    for (int i = 0; i < cloum; i++)
    {
        cout << field[i].name << "\t";
    }
    cout<<endl;

    for (int i = 0; i < row; i++)
    {
        MYSQL_ROW rows = mysql_fetch_row(res); // 类似于迭代器一杨
        for (int j = 0; j < cloum; j++)
        {
            cout << rows[j] << "\t";
        }
        cout << endl;
    }

    // while (1)
    // {
    //     string code;
    //     cout << "MySql>>";
    //     if (!getline(std::cin, code))
    //         break;
    //     if (code == "quit")
    //     {
    //         cout << "bye bye" << endl;
    //         break;
    //     }
    //     int n = mysql_query(my, code.c_str());
    //     if (n == 0)
    //     {
    //         cout << "Success" << endl;
    //     }
    //     // mysql在语言及查询的数据结果存放在内存当中需要我们手动拿数据 是一个
    // }

    mysql_close(my);
}